const path = require("path");
const glob = require("glob");
const ejs = require("ejs");
const fsE = require("fs-extra");

/**
 *
 * @param option 拿到command的返回
 * @returns {Promise<unknown>}
 */
function ejsRender(option) {
  /**
   * 拿到用户存放路径
   */
  const { local } = option;
  /**
   * 获得模本的路径
   * @type {string}
   */
  const dir = path.join(process.cwd(), "scripts", "template");
  return new Promise((resolve, reject) => {
    /**
     * 拿到模板里面所有的文件
     */
    glob("**", {
      cwd: dir,
      nodir: true,
      ...option
    }, (error, files) => {
      if (error) {
        reject(error);
      }
      Promise.all(files.map((file) => {
        // 拿到每个文件存放到目标目录
        const filePath = path.join(local, file);
        return new Promise((resolve1, reject1) => {
          // 使用ejs对模板的每个文件进行渲染
          ejs.renderFile(path.join(dir, file), { ...option }, {}, (error, result) => {
            if (error) {
              reject1(error);
            } else {
              try {
                // 拿到结果后先在目标目录创建文件
                fsE.ensureFileSync(filePath);
                // 然后写入文件
                fsE.writeFileSync(filePath, result);
              } catch (e) {
                console.log(e);
              }
              resolve1(result);
            }
          });
        });
      })).then(() => {
        resolve(true);
      }).catch((err) => {
        reject(err);
      });
    });
  });
}

module.exports = ejsRender;
